package cartes;


import comportement.IncidentFacheux;
import comportement.ActionCarte;
import java.util.ArrayList;
import comportement.ActionClasse;
import comportement.MalusMonstre;
import java.io.Serializable;
import plateau.Joueur;


public abstract class Carte implements Serializable {

    /*
     * Attributs
     */
    protected String nom;
    protected String description;
    protected int categorie;
    protected ArrayList<IncidentFacheux> incidentFacheux;
    protected ActionCarte actionCarte;
    protected ArrayList<ActionClasse> actionClasse;
    protected MalusMonstre malusMonstre;

    protected int prix;

    protected String cheminImage;



    /*
     * Constructeur
     */
    public Carte(String nom, String description, int categorie) {
        this.nom = nom;
        this.description = description;
        this.categorie = categorie;
    }

     public Carte(String nom, String description, int categorie, String cheminImage ) {
        this.nom = nom;
        this.description = description;
        this.categorie = categorie;
        this.cheminImage = cheminImage;
    }
    
    /**
     * Copy constructor.
     */
    public Carte(Carte c) {
        this(c.getNom(), c.getDescription(), c.getCategorie());
    }

    /*
     * Méthodes
     */
    public abstract void combattre();
    public abstract void fuir();
    public abstract void utiliser();
    public abstract void utiliser(Joueur j);
    public abstract void utiliser(Joueur j, Joueur j2);
    public abstract void equiper();
    public abstract void utiliserPouvoir();

    public String toString() {
        return "Carte : " + nom + "(" + cheminImage + ")";
    }
    /*
     * Getter / Setter
     */

    public ActionCarte getActionCarte() {
        return actionCarte;
    }

    public void setActionCarte(ActionCarte actionCarte) {
        this.actionCarte = actionCarte;
    }

    public ArrayList<ActionClasse> getActionClasse() {
        return actionClasse;
    }

    public void setActionClasse(ArrayList<ActionClasse> actionClasse) {
        this.actionClasse = actionClasse;
    }

    public int getCategorie() {
        return categorie;
    }

    public void setCategorie(int categorie) {
        this.categorie = categorie;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public ArrayList<IncidentFacheux> getIncidentFacheux() {
        return incidentFacheux;
    }

    public void setIncidentFacheux(ArrayList<IncidentFacheux> incidentFacheux) {
        this.incidentFacheux = incidentFacheux;
    }

    public MalusMonstre getMalusMonstre() {
        return malusMonstre;
    }

    public void setMalusMonstre(MalusMonstre malusMonstre) {
        this.malusMonstre = malusMonstre;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;

    }

     public int getPrix() {
        return prix;
    }

    public void setPrix(int prix) {
        this.prix = prix;
    }

    public String getCheminImage() {
        return cheminImage;
    }

    public abstract boolean equipable();
    public abstract boolean utilisable();

 }   
    
